<?php
/**
 * 支付宝纯担保交易
 *
 * <judasnow@gmail.com>
 */
class alipayescow{

        private $_CI;

        public function __construct(){
                $this->_CI->config->load( 'alipayescow' , TRUE );
                $this->_CI =& get_instance();
        }

        public function alipayto(){
/*{{{*/
                $this->_CI->load->library( 'alipay/alipay_service' );
                //必填
                //订单号
                //请与贵网站订单系统中的唯一订单号匹配
                $out_trade_no = date('Ymdhis');
                //订单名称，显示在支付宝收银台里的“商品名称”里，显示在支付宝的交易管理的“商品名称”的列表里。
                $subject = $input->post( 'subject' , TRUE );
                //订单描述、订单详细、订单备注，显示在支付宝收银台里的“商品描述”里
                $body = $input->post( 'alibody' );
                //订单总金额，显示在支付宝收银台里的“应付总额”里
                $price = $input->post( 'total_fee' );
                //物流费用，即运费。
                $logistics_fee = "0.00";
                //物流类型，三个值可选：EXPRESS（快递）、POST（平邮）、EMS（EMS）
                $logistics_type = "EXPRESS";
                //物流支付方式，两个值可选：SELLER_PAY（卖家承担运费）、BUYER_PAY（买家承担运费）
                $logistics_payment = "SELLER_PAY";
                //商品数量，建议默认为1，不改变值，把一次交易看成是一次下订单而非购买一件商品。
                $quantity = "1";

                //选填参数
                //买家收货信息（推荐作为必填）
                //该功能作用在于买家已经在商户网站的下单流程中填过一次收货信息，而不需要买家在支付宝的付款流程中再次填写收货信息。
                //若要使用该功能，请至少保证receive_name、receive_address有值
                //收货信息格式请严格按照姓名、地址、邮编、电话、手机的格式填写
                //收货人姓名，如：张三
                $receive_name = "收货人姓名";
                //收货人地址，如：XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
                $receive_address = "收货人地址";
                //收货人邮编，如：123456
                $receive_zip = "123456";
                //收货人电话号码，如：0571-81234567
                $receive_phone = "0571-81234567";
                //收货人手机号码，如：13312341234
                $receive_mobile = "13312341234";
                //网站商品的展示地址，不允许加?id=123这类自定义参数
                $show_url = "http://www.xxx.com/myorder.php";

                //构造要请求的参数数组
                $parameter = array(
                        "service" => "create_partner_trade_by_buyer",
                        "payment_type" => "1",
                        "partner" => trim($aliapy_config['partner']),
                        "_input_charset" => trim(strtolower($aliapy_config['input_charset'])),
                        "seller_email" => trim($aliapy_config['seller_email']),
                        "return_url" => trim($aliapy_config['return_url']),
                        "notify_url" => trim($aliapy_config['notify_url']),
                        "out_trade_no" => $out_trade_no,
                        "subject" => $subject,
                        "body" => $body,
                        "price" => $price,
                        "quantity" => $quantity,
                        "logistics_fee" => $logistics_fee,
                        "logistics_type" => $logistics_type,
                        "logistics_payment" => $logistics_payment,
                        "receive_name" => $receive_name,
                        "receive_address" => $receive_address,
                        "receive_zip" => $receive_zip,
                        "receive_phone" => $receive_phone,
                        "receive_mobile" => $receive_mobile,
                        "show_url" => $show_url
                );

                //构造担保交易接口
                $alipayService = new AlipayService( $aliapy_config );
                echo $html_text = $alipayService->create_partner_trade_by_buyer($parameter);
        }/*}}}*/
        public function notify_url(){
        /*{{{*/
                $this->_CI->load->library( 'alipay/alipay_notify' );
                //计算得出通知验证结果
                $alipayNotify = new AlipayNotify( $aliapy_config );
                $verify_result = $alipayNotify->verifyNotify();
                if($verify_result) {
                        //验证成功
                        //请在这里加上商户的业务逻辑程序代
                        //——请根据您的业务逻辑来编写程序（以下代码仅作参考）
                        //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
                        $out_trade_no = $_POST['out_trade_no'];//获取订单号
                        $trade_no = $_POST['trade_no'];//获取支付宝交易号
                        $total = $_POST['price'];//获取总价格

                        if($_POST['trade_status'] == 'WAIT_BUYER_PAY') {
                        //该判断表示买家已在支付宝交易管理中产生了交易记录，但没有付款
                        //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
                        //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                        //如果有做过处理，不执行商户的业务程序
                        echo "success";//请不要修改或删除
                        //调试用，写文本函数记录程序运行情况是否正常
                        //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
                        }elseif( $_POST['trade_status'] == 'WAIT_SELLER_SEND_GOODS' ){
                                //该判断表示买家已在支付宝交易管理中产生了交易记录且付款成功，但卖家没有发货
                                //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
                                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                                //如果有做过处理，不执行商户的业务程序
                                echo "success";//请不要修改或删除
                                //调试用，写文本函数记录程序运行情况是否正常
                                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
                        }else if($_POST['trade_status'] == 'WAIT_BUYER_CONFIRM_GOODS'){
                                //该判断表示卖家已经发了货，但买家还没有做确认收货的操作
                                //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
                                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                                //如果有做过处理，不执行商户的业务程序
                                echo "success";		//请不要修改或删除
                                //调试用，写文本函数记录程序运行情况是否正常
                                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
                        }elseif($_POST['trade_status'] == 'TRADE_FINISHED'){
                                //该判断表示买家已经确认收货，这笔交易完成
                                //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
                                //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                                //如果有做过处理，不执行商户的业务程序
                                echo "success";//请不要修改或删除
                                //调试用，写文本函数记录程序运行情况是否正常
                                //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
                        }else{
                                //其他状态判断
                                echo "success";
                                //调试用，写文本函数记录程序运行情况是否正常
                                //logResult ("这里写入想要调试的代码变量值，或其他运行的结果记录");
                        }
                //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
                }else{
                    //验证失败
                    echo "fail";
                    //调试用，写文本函数记录程序运行情况是否正常
                    //logResult("这里写入想要调试的代码变量值，或其他运行的结果记录");
                }
        }/*}}}*/
        public function return_url(){
                $this->_CI->load->library( 'alipay/alipay_notify' );
                //计算得出通知验证结果
                $alipayNotify = new AlipayNotify($aliapy_config);
                $verify_result = $alipayNotify->verifyReturn();
                if($verify_result) {
                //验证成功
                //请在这里加上商户的业务逻辑程序代码
                //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
                        //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
                        $out_trade_no	= $_GET['out_trade_no'];	//获取订单号
                        $trade_no		= $_GET['trade_no'];		//获取支付宝交易号
                        $total_fee		= $_GET['price'];			//获取总价格
                        if($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
                                //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
                                        //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                                        //如果有做过处理，不执行商户的业务程序
                        }else{
                                echo "trade_status=".$_GET['trade_status'];
                        }
                        echo "验证成功<br />";
                        echo "trade_no=".$trade_no;
                        //——请根据您的业务逻辑来编写程序（以上代码仅作参考）—
                }
                else {
                    //验证失败
                    //如要调试，请看alipay_notify.php页面的verifyReturn函数，比对sign和mysign的值是否相等，或者检查$responseTxt有没有返回true
                    echo "验证失败";
                }
        }
}

